﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _14.模板方法模式
{
    class Program
    {
        static void Main(string[] args)
        {
            Spinach spinach = new Spinach();
            spinach.CookVegetabel();
            Console.Read();
        }
    }
    public abstract class Vegetabel
    {
        // 模板方法，不要把模版方法定义为Virtual或abstract方法，避免被子类重写，防止更改流程的执行顺序
        public void CookVegetabel()
        {
            Console.WriteLine("抄蔬菜的一般做法");
            pourOil();
            HeatOil();
            pourVegetable();
            stir_fry();
        }
        public void pourOil()
        {
            Console.WriteLine("倒油");
        }
        public void HeatOil()
        {
            Console.WriteLine("把油烧热");
        }
        public abstract void pourVegetable();// 油热了之后倒蔬菜下去，具体哪种蔬菜由子类决定
        public void stir_fry()
        {
            Console.WriteLine("翻炒");
        }
    }
    public class Spinach : Vegetabel// 菠菜
    {

        public override void pourVegetable()
        {
            Console.WriteLine("倒菠菜进锅中");
        }
    }
    public class ChineseCabbage : Vegetabel// 大白菜
    {
        public override void pourVegetable()
        {
            Console.WriteLine("倒大白菜进锅中");
        }
    }
 
}
